/** 音量控制gui,解决目前的电脑bug用,也作为一个简单的gui实例
  以class的形式做出,可重复使用,绑定在其他应用中

  By setycyas @2024-09-16
*/

class VolGui {

  _gui := "" ;窗口
  _volEdit := "" ;音量文字控件
  _volUpDown := "" ;音量增减控件
  _confirmBtn := "" ;变更音量按钮

  __New(){
    local volume := SoundGetVolume() ;音量
    this._gui := Gui("+AlwaysOnTop", "音量控制")
    this._confrmBtn := this._gui.Add("Button", "w60", "设定")
    this._volEdit := this._gui.Add("Edit", "xp+75 yp+2 w60 r1 number", volume) 
    this._volUpDown := this._gui.Add("UpDown", "Range0-100", volume)
  }
  
  /** 事件绑定函数
  */
  _onVolUpDownChange(obj, info){
    SoundSetVolume(this._volEdit.Text)
  }
  _onButtonClick(obj, info){
    SoundSetVolume(this._volEdit.Text)
  }
  ;关闭窗口时退出,可在main()函数中指定是否绑定,一般在主脚本使用时才绑
  _onGuiClose(thisGui){
    ExitApp()
  }

  /** 主函数,设置和显示窗口,isMain为True时绑定关闭窗口退出函数
  */
  main(isMain){
    static obm := ObjBindMethod ;函数名简写,制作对象绑定函数
    this._confrmBtn.onEvent("Click",obm(this, "_onButtonClick"))
    this._volUpDown.onEvent("Change",obm(this, "_onVolUpDownChange"))
    if (isMain) {
      this._gui.onEvent("Close",obm(this, "_onGuiClose"))
    }
    this._gui.show("w180 h40")
    return this
  }

}

/* 运行当前脚本
*/ if (A_ScriptName == "音量控制.2.ahk") {
  iconFile := "..\Icon\音量01.png"
  TraySetIcon(iconFile, , 1)
  
  vg := VolGui()
  vg.main(True)
}
